package com.example.main;

import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;

import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.concurrent.TimeoutException;

public class ProducerHelloWorld {
    /**
     * 生产者 → 消息队列
     * 创建连接工厂,并设置参数
     * 创建连接 Connection
     * 创建通道 Channel
     * 创建队列
     * 发送消息
     */
    public static void main(String[] args) throws IOException, TimeoutException {
        //创建连接工厂,并设置参数
        ConnectionFactory factory = new ConnectionFactory();
        if(true){
            factory.setHost("localhost");
            factory.setPort(5672);
            factory.setUsername("guest");
            factory.setPassword("guest");
            factory.setVirtualHost("/");
        }
        //创建连接 Connection
        Connection connection = factory.newConnection();
        //创建通道 Channel
        Channel channel = connection.createChannel();
        //创建队列
        /**
         * String queue                     : 队列名称
         * boolean durable                  : 是否持久化,当消息队列重启时，消息是否还在
         * boolean exclusive                : 第一种含义:是否独占,是否只能有一个消费者监听
         *                                    第二种含义:connection关闭是否删除队列
         * boolean autoDelete               : 是否自动删除，当没有消费者时，是否自动删除
         * Map<String, Object> arguments    : 参数
         */
        channel.queueDeclare("HelloWorld",true,false,false,null);
        //发送消息
        /**
         * String exchange          : 交换机名称,简单模式不使用交换机
         * String routingKey        : 路由规则,当不使用交换机时,路由键需要和队列名称相同
         * BasicProperties props    : 配置参数
         * byte[] body              : 消息体,真实的数据
         */
        String str = "RabbitMQ is so easy!" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());
        channel.basicPublish("","HelloWorld",null,str.getBytes());

        //释放资源
        channel.close();
        connection.close();

        System.out.println("消息发送成功");
    }
}